Node.js 基础
Node.js 是一个基于 Chrome V8 的 JavaScript 运行环境,这也让 JavaScript 成为与 PHP、Python、Perl、Ruby 等服务端语言对等的脚本语言之一。Node.js 能够在服务端运行 JavaScript 的代码和跨平台环境,因此在 node.js 出现以前,JavaScript 经常作为客户端程序设计语言使用。
ECMAScript 是 JavaScript 最初的名字,他由网景公司的 Brendan Eich 所开发的一种脚本语言标准化规范,历经 Mocha、LiveScript 最终成为 JavaScript,并在 1995年由 Sun 正式联合发布 JavaScript
获取 Node.js 的方法非常简单,我们以 Debian Linux 发行版系为例,通过 https://nodejs.org/zh-cn/ 访问 node.js 的官方站点进行下载你需要的版本(本书版本为 10),解压 tar.xz
文件后进入其 bin
目录,比昂通过 ln
建立软链接到 /usr/bin
中,最后通过其 node -v
来查看是否软链接建立成功
1 | ln node /usr/bin/node |
JavaScript vs Node.js
JavaScript 他本身是一个客户端程序设计语言,因此针对的也是 DOM、BOM、ECMAScript 组合而成,因此针对的也是前端部分,而 Node.js 他主要通过 ECMAScript、OS、File、Net、Databases 等五个部分,分别实现了 JavaScript 语法基础、操作系统交互、文件系统、网络系统和数据库,这也是后端语言最为常用的几个部分,因此他可以脱离浏览器来运行 JavaScript 的项目。
脚本文件运行
创建名称为 hey.js
的文件后,写入 DOM 语法并通过 node.js
来进行运行
1 | console.log("Hello,world!") |
交互式环境执行
1 | $ node |
构建 Node.js 项目
1 | const http = require('http'); |
至此通过 node index.js
即可运行一个简单的 node 项目,之后点击或访问 console.log
的输出来访问项目视图:http://127.0.0.1:8210/
WebStorm 如果不支持 Node.js 相关语法可以通过在 File -> Setting -> Languages & Frameworks -> JavaScript -> Libraries 内下载 node 语法支持
NPM
NPM(Node Package Manager)Node 包管理器,是 node.js 默认的依赖项之一,通常会随着 node.js 一起被安装,完全由 JavaScript 写成,最初由 lsaac Z.Schlueter 进行开发,2020 年 3 月 16 日 被 Github 收购。
node.js 维护的包管理器允许开发者下载\安装\上传他人\自己编写的第三方包到本地使用\他人使用。
NPM 的包注册(Register)也被称之为 “JavaScript 包注册表”,为了按照名称和版本来解析包,因此 nmp 采用了 CommonJS 包注册规范,这就导致了每个包都会存在一个 Json 格式的元文件。
NPM 名称以 “先到先得” 的原则进行注册,这就不会导致各个模块的名称不会发生错乱,但一旦有人撤回了自己所发布的包,就会导致依赖这个包的项目的对应功能也会出现问题。
你可以通过 nmp -v
的方式来查看版本以及是否正常安装,也可以使用 nmp install npm -g
让其进行升级。
package.json
一个项目中如果存在 package.json
文件,那么可以使用 npm install
命令来自动安装和维护所需要的依赖包,你可以通过使用 npm init
来初始化一个 package.json
文件。
Id | Name |
---|---|
name | 包名 |
version | 包的版本号采用了语义版本号 X(住版本号).Y(次版本号).Z(补丁版本号) 三位 |
description | 包的描述 |
main | 指定程序的入口文件 |
scripts | 指定了运行脚本命令的 npm 命令行缩写 |
repository | 代码仓库位置 |
keywords | 关键词 |
author | 包作者的名字 |
license | 开源许可证,默认为 (ISC) |
package.json 文件可以手写也可以通过
npm init
进行生成(就是回答一些问题后自行进行创建)
从而可以快速体验工作空间以及脚本外壳的使用,因此你需要在初始化后的 CommonJS 包中添加或修改一出信息:
1 | { |
有了 package.json 文件后,可以直接通过
npm install
进行安装所需要的包(在 dependencires 字段中写了),也可以通过指定安装依赖并写入字段的方法进行完善install express --save``` 参数将所需依赖写入 package.json 文件中的 ```dependencies``` 属性中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
同样的还提供了写入 ```devDependencies``` 属性中的参数 ```--save-dev```
在 ```package.json``` 中,如果在 ```script``` 字段内定义 js 脚本文件,即可通过 ``` npm run test``` 进行运行,此时也就同等于 ```node index.js```
当然也可以通过使用 ```rpm run``` 来查看当前项目所有的 NPM 脚本命令,因为执行该命令时会执行指定的脚本命令,因此只要是 Shell 可以运行的都可以写在 NPM 脚本中。
在大的项目中, npm run 会在 ```node_modules/.bin``` 子目录中加入变量,因此在该目录中的所有脚本都可以字节使用脚本的名称而不需要写成绝对路径。
### 常用命令
| Id | Name | Info |
| --- | --- | --- |
| 1 | ```npm install express``` | 安装某一个模块 |
| | | ```-g``` 全局安装这个模块(也就是说直接在 ```/user/local/bin``` 内直接关联) |
| 2 | ```npm uninstall name``` | 卸载安装的所有模块 |
| | | ```--save``` 以 ```dependencires``` 为目标进行卸载 |
| | | ```--save-dev``` 从 ```devDependencies``` 为目标进行卸载 |
| | | ```--no-save``` 不会将 ```package.json``` 中进行删除依赖 |
| 3 | ```npm update express``` | 更新模块 |
| 4 | ```npm outdated``` | 检查模块版本 |
| 5 | ```npm list``` |查看本地安装的模块 |
| | | ```-g ``` 查看全局安装的模块 |
| 6 | ```npm search express``` | 搜索模块 |
| 7 | ```npm cache clean``` | 清除 NPM 本地缓存 |
| 8 | ```npm start/restart ``` | 启动/重启模块 |
## REPL
REPL(Read Eval Print Loop,交互式解释器),也有另一种解释是:“读取-求值-输出-循环(Read-Eva-Print Loop,REPL)”,表示一个交互式顶层构件,也就是说提供一个简单的交互式编程环境。
Node 也自带了这种交互式解释器,同样可以完成读取、执行、输出、循环的任务,通常你可以直接在终端输入 ```node``` 来进入 node.js 的交互式环境:
```js
1 + 1
2
x = 1
1
y = 1
1
x + y
2
console.log("Hello,world!")
Hello,world!
undefined
var x = 0
undefined
do {
... x++;
... console.log("echo: " + x);
... } while (x < 10);
echo: 1
echo: 2
echo: 3
echo: 4
echo: 5
echo: 6
echo: 7
echo: 8
echo: 9
echo: 10
undefined
交互
REPL 是由node.js所支持的可运行在终端内的控制台窗口即交互式命令环境,按照官方的说法叫“简单的交互式编程环境”,通常就比如你在终端内输入 R
,进入R的REPL环境一样,node同样支持。
提示
Node REPL与其他的REPL环境内不同的特点在于,他支持tap
键进行补全,以及提示:
1 | > console.log |
点命令
node.js与 python以及r等 repl交互式环境不同的之处通过点命令
可以体现的琳琳尽至,就比如:
python
1 | Python 3.9.2 (default, Feb 20 2021, 18:40:11) |
node
1 | Welcome to Node.js v15.10.0. |
No.x | Info | 快捷键 |
---|---|---|
.help | 显示帮助 | |
.editor | 启用编辑模式,可以编写多行的js代码,在editor模式下可通过使用ctrl+D 来运行 code |
|
.break | 当输入多行表达式的时候,使用break可以中止进一步输入 | ctrl+c |
.clear | 将 REPL上下文设置空占位符,通常等价式为 Linux内的create ,主要用于清除多行表达式 |
|
.load | 加载 js文件 | |
.save | 保存 repl 环境下输入的所有内容 | |
.exit | 退出 node.js repl 交互式环境 |